JavaScript is partly an object-oriented language.
To learn JavaScript, we got to learn the object-oriented parts of JavaScript.
In this article, we’ll look at the DOM.
Accessing DOM Nodes
We can access DOM nodes with built-in objects in the browser.
The document node gives us access to the current document.
We can see the properties of it with the console.dir method:
console.dir(document);
We can use the nodeType property to get the type of node.
ndoeName has the node’s name.
nodeValue has the value, which is the text for text nodes for example.
The:
document.nodeType;
returns 9.
There’re 12 node types, which are represented by integers.
The most common is 1 for element, 2 attributes, and 3 for text.
document.nodeName
returns '#document' .
And document.nodeValue is null .
documentElement
The document.documentElement property gives us the HTML element.
The nodeType is 1 since it’s an element.
We can see that with:
document.documentElement.nodeType
We can get the nodeName with:
document.documentElement.nodeName
and get the tag name with:
document.documentElement.tagName
They both return 'HTML' .
Child Nodes
We can get child nodes from the document object.
Also, we can check if there’re any child nodes with the hasChildNodes method.
For example, we can write:
document.documentElement.hasChildNodes();
and we get true .
The childNodes property has the length property to get the number of child nodes of a DOM node.
For example, we can write:
document.documentElement.childNodes.length;
And we can get the child nodes by its index:
document.documentElement.childNodes[0];
document.documentElement.childNodes[1];
etc.
To get the parent node, we can use the parentNode property:
document.documentElement.childNodes[1].parentNode;
they all return some element.
In the last example, the HTML element is returned.
For instance, if we have:
<body>
<p class="opener">foo</p>
<p><em>bar</em> </p>
<p id="closer">baz</p>
<!-- the end -->
</body>
Then console.log(document.body.childNodes.length) logs 10 since we have the HTML elements, attribute nodes, text nodes, and comment nodes.
Attributes
We can check whether an element has attributes with the hasAttributes method.
For instance, we can write:
console.log(document.body.childNodes[1].hasAttributes())
then we get true .
If it’s true then the node has attributes.
We can get the attributes with the attributes .
For instance, we can write:
console.log(document.body.childNodes[1].attributes[0].nodeName)
then we get 'class'.
nodeName get the name of the attribute.
We can also use the nodeValue property to get the attribute value.
So we can write:
console.log(document.body.childNodes[1].attributes['class'].nodeValue)
We can also get the attribute with the getAttribute method:
console.log(document.body.childNodes[1].getAttribute('class'))
Accessing the Content Inside a Tag
We can get content inside a tag.
To do that, we can use the textContent property to get the text content inside a tag.
So we can write:
console.log(document.body.childNodes[1].textContent)
then we get 'foo' .
Also, we can get the innerHTML property to get the HTML content in an HTML element node:
console.log(document.body.childNodes[3].innerHTML)
and we get:
<em>bar</em>
Like other elements, we can get the length , nodeName and nodeValue .
For instance, we can write:
console.log(document.body.childNodes[1].childNodes.length)
to get the length of the child nodes and:
console.log(document.body.childNodes[0].nodeName)
which logs ‘#text’ and:
console.log(document.body.childNodes[1].childNodes[0].nodeValue)
and we get 'foo' .
Conclusion
We can use various properties to get DOM nodes and attributes.